package com.yunyao.framework.service;

import com.yunyao.common.dto.InvoiceDto;
import com.yunyao.common.dto.InvoiceSourceDto;
import com.yunyao.common.dto.InvoiceSourceOrderDto;
import com.yunyao.common.dto.excel.InvoiceExcelDto;
import com.yunyao.common.dto.excel.SettlementExcelDto;
import com.yunyao.common.dto.order.ProjectOrderDto;
import com.yunyao.common.web.util.PageResult;
import com.yunyao.common.web.util.YResult;
import com.yunyao.dao.model.BamuInvoiceSource;
import com.yunyao.framework.dto.reconciliation.ReconciliationSaveDto;
import com.yunyao.framework.vo.Invoice.*;
import com.yunyao.framework.vo.project.ProjectSettlementVO;
import com.yunyao.framework.vo.projectorder.ProjectOrderVO;
import com.yunyao.framework.vo.reconciliation.ReconciliationOrderVO;
import com.yunyao.framework.vo.spreconciliation.SpReconciliationOrderVO;
import com.yunyao.framework.vo.supplier.SupplierSettlementVO;

import java.util.List;

public interface InvoiceService {
    /**
     * 获取供应商发票列表
     * @param invoiceDto
     * @return
     * */
    YResult<PageResult<InvoiceVO>> pageList(InvoiceDto invoiceDto);
    /**
     * 根据Id获取供应商发票信息
     * @param id
     * @return
     * */
    YResult<InvoiceinfoVO> getInvoiceById(Long id);

    YResult<InvoiceInfosssVO> getInvoicessssById(Long id);

    /**
     * 保存项目供应商发票信息
     * @param saveDto
     * @return
     * */
    YResult<String> saveInfo(InvoiceDto saveDto);

    YResult<PageResult<InvoiceVO>> pageInvoiceList(InvoiceDto invoiceDto);

    YResult<PageResult<SpReconciliationOrderVO>> pageProjectList(InvoiceDto invoiceDto);
    YResult<PageResult<SpReconciliationOrderVO>> pageProjectList2(InvoiceDto invoiceDto);
    YResult<InvoiceCountVO> getcount(Long id);

    /**
     * 根据Id获取供应商发票结算单，清单信息
     * @param invoiceSourceOrderDto
     * @return
     * */
    YResult<PageResult<InvoiceSourceOrderVO>> getInvoiceSourceOrderById(InvoiceSourceOrderDto invoiceSourceOrderDto);
    YResult<PageResult<InvoiceSourceOrderVO>> getInvoiceSourceOrderBycontractId(InvoiceSourceOrderDto invoiceSourceOrderDto);

    YResult<PageResult<InvoiceSourceVO>> getInvoiceSourceById(InvoiceSourceDto invoiceSourceDto);

    YResult<PageResult<ProjectOrderVO>> getProjectOrderList(InvoiceSourceDto projectOrderDto);

    YResult<Boolean> deleteInfo(InvoiceDto reconciliationDto);

    List<InvoiceExcelDto> export(InvoiceDto invoiceDto);
}
